﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class FormConteneur : Form
    {
        private string username;
        //Database connection:
        static string connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename='|datadirectory|\Database1.mdf';Integrated Security=True;User Instance=True";
        static SqlConnection cn = new SqlConnection(connectionString);
        string sCommand;
        //Data adapter that understands SQL databases:
        static SqlDataAdapter da;
        //Table pour stocker les résultats de la requête
        static DataTable dataTable = new DataTable();
        string[,] dataUser = new string[1, 4];
        Boolean status = false;

        private BindingSource bindingSource1 = new BindingSource();
        private SqlDataAdapter dataAdapter = new SqlDataAdapter();

        public FormConteneur()
        {
            InitializeComponent();
            dataGridView1.Dock = DockStyle.Fill;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            panelAdmin.Visible = false;
            panelGestionUtilisateur.Visible = false;

            // Lie le DataGridView au BindingSource
            // Et charge les donnée de la BDD
            dataGridView1.DataSource = bindingSource1;
            GetData("select * from Utilisateur");

            //Empecher la selection multiple
            dataGridView1.MultiSelect = false;

            /*FormLogin formLogin = new FormLogin();
            formLogin.MdiParent = this;
            formLogin.Show();

            FormAdmin formAdmin = new FormAdmin();
            formAdmin.MdiParent = this;

            FormEmploye formEmploye = new FormEmploye();
            formEmploye.MdiParent = this;

            FormUtilisateurs formUser = new FormUtilisateurs();
            formUser.MdiParent = this;*/           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                //Command to execute           
                sCommand = "SELECT * FROM Utilisateur";
                da = new SqlDataAdapter(sCommand, cn);
                int recordsAffected = da.Fill(dataTable);

                //Remplit le tableau de données
                if (recordsAffected > 0)
                {
                    foreach (DataRow dr in dataTable.Rows)
                    {
                        username = dr[1].ToString().Trim();
                        if (txtUsername.Text.Equals(dr[1].ToString().Trim()))
                        {
                            string s2 = dr[2].ToString(); //password
                            if (txtPassword.Text.Equals(dr[2].ToString().Trim()))
                            {
                                MessageBox.Show("Bienvenue " + username + ".", "Identification réussie", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                status = true;
                                /* Connexion en tant qu'administrateur */
                                if (dr[3].ToString().Trim().Equals("admin"))
                                {
                                    FormAdmin formAdmin = new FormAdmin();
                                    //formAdmin.ShowDialog();
                                    panelLogin.Visible = false;
                                    panelAdmin.Visible = true;
                                    this.txtPassword.Text = "";
                                    this.txtUsername.Text = "";
                                    break;
                                }
                                /* Connexion en tant qu'employé */
                                else if (dr[3].ToString().Trim().Equals("employe"))
                                {
                                    FormEmploye formEmploye = new FormEmploye(this);
                                    formEmploye.ShowDialog();
                                    this.txtPassword.Text = "";
                                    this.txtUsername.Text = "";
                                    break;
                                }
                            }
                        }
                        status = false;
                    }
                    if (status == false)
                    {
                        throw new ExceptionLoginFailed("Login ou password incorrect.");
                    }

                }
            }
            catch (ExceptionLoginFailed ex)
            {
                MessageBox.Show(ex.GetMessage(), "Authentification Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            catch (SqlException ex)
            {
                string msg = "";
                for (int i = 0; i < ex.Errors.Count; i++)
                {
                    msg += "Error #" + i + "Message : " + ex.Errors[i].Message + "\n";
                }
                MessageBox.Show(msg,"Erreur SQL",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
            finally
            {
                cn.Close();
            }
        }

        private void gestionDesUtilisateursToolStripMenuItem_Click(object sender, EventArgs e)
        {
            panelGestionUtilisateur.Visible = true;
            //FormUtilisateurs form = new FormUtilisateurs();
            //form.Show();
        }
        private void GetData(string selectCommand)
        {
            try
            {
                // Spécifie un chemin de connexion
                String connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename='|datadirectory|\Database1.mdf';Integrated Security=True;User Instance=True";

                // Créé un new Data Adapter basé sur une commande spécifiée.
                dataAdapter = new SqlDataAdapter(selectCommand, connectionString);

                // Créé un "Buider Command" pour générer (update, insert, delete) des commandes
                // établis par "selectCommand"
                // utilisé pour mettre à jour la BDD.
                SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);

                // Créé une nouvelle dataTable et la lie au "BindingSource".
                DataTable table = new DataTable();
                table.Locale = System.Globalization.CultureInfo.InvariantCulture;
                dataAdapter.Fill(table);
                bindingSource1.DataSource = table;

                // Redimensionne le "DataGridView" en fonction du contenu récemment chargé.
                dataGridView1.AutoResizeColumns(
                    DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
            }
            catch (SqlException)
            {
                MessageBox.Show("Erreur SQL");
            }
        }
        private void SetData(string selectCommand)
        {
            try
            {
                // Spécifie un chemin de connexion
                String connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename='|datadirectory|\Database1.mdf';Integrated Security=True;User Instance=True";
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = selectCommand;
                SqlConnection cnx = new SqlConnection(connectionString);
                cnx.Open();
                cmd.Connection = cnx;
                cmd.ExecuteNonQuery();
                cnx.Close();
            }
            catch (SqlException)
            {
                MessageBox.Show("Erreur Sql");
            }
        }    

        private void quitterToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void deconnexionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            panelLogin.Visible = true;
            panelAdmin.Visible = false;
            panelGestionUtilisateur.Visible = false;
        }

        private void btnAjouter_Click_1(object sender, EventArgs e)
        {
            if (!textBox1.Text.Equals("") && !textBox2.Text.Equals("") && !comboBox1.Text.Equals(""))
            {
                // Mis à jour de la bdd avec les changements de l'user. 
                SetData("insert into Utilisateur([username],[password],type) VALUES ('" + textBox1.Text + "','" + textBox2.Text + "','" + comboBox1.Text + "')");
                dataAdapter.Update((DataTable)bindingSource1.DataSource);
                GetData(dataAdapter.SelectCommand.CommandText);
                textBox1.Text = "";
                textBox2.Text = "";
                comboBox1.Text = "";
            }
            else
            {
                MessageBox.Show("Veuillez remplir les 3 champs SVP !");
            }
        }

        private void btnModifier_Click_1(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count > 0)
            {
                if (!textBox1.Text.Equals(""))
                {
                    SetData("update Utilisateur set [username] ='" + textBox1.Text + "'where id_utilisateur=" + (dataGridView1.CurrentRow.Cells[0].Value));
                    dataAdapter.Update((DataTable)bindingSource1.DataSource);
                    GetData(dataAdapter.SelectCommand.CommandText);
                    textBox1.Text = "";
                }
                if (!textBox2.Text.Equals(""))
                {
                    SetData("update Utilisateur set [password] ='" + textBox2.Text + "'where id_utilisateur=" + (dataGridView1.CurrentRow.Cells[0].Value));
                    dataAdapter.Update((DataTable)bindingSource1.DataSource);
                    GetData(dataAdapter.SelectCommand.CommandText);
                    textBox2.Text = "";
                }

                if (!comboBox1.Text.Equals(""))
                {
                    SetData("update Utilisateur set type ='" + comboBox1.Text + "'where id_utilisateur=" + (dataGridView1.CurrentRow.Cells[0].Value ));
                    dataAdapter.Update((DataTable)bindingSource1.DataSource);
                    GetData(dataAdapter.SelectCommand.CommandText);
                    comboBox1.Text = "";
                }

                else if (textBox1.Text.Equals("") && textBox2.Text.Equals("") && comboBox1.Text.Equals(""))
                {
                    MessageBox.Show("Veuillez remplir au moins un champs pour le modifier, SVP");
                }
            }
            else
            {
                MessageBox.Show("Veuillez Sélectionner une ligne à modifier, SVP");
            }
        }

        private void btnSupprimer_Click_1(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count > 0)
            {
                //SetData("delete from Utilisateur where id_utilisateur=" + (dataGridView1.CurrentRow.Index+1));
                System.Console.WriteLine(dataGridView1.CurrentRow.Cells[0].Value);
                SetData("delete from Utilisateur where id_utilisateur=" + (dataGridView1.CurrentRow.Cells[0].Value));
                dataAdapter.Update((DataTable)bindingSource1.DataSource);
                GetData(dataAdapter.SelectCommand.CommandText);
            }
            else
            {
                MessageBox.Show("Veuillez Sélectionner une ligne à supprimer, SVP");
            }
        }

        public string getUsername()
        {
            return username;
        }
                     
    }
}
